perm filename MIXMLD[MIX,SYS] blob
sn#020803 filedate 1972-02-08 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 OPDEF OUTDEC [PUSHJ P, .]
00007 00003 OPLIST: SIXBIT /ADD/
00012 00004 GOTOP: 0501 ADD
00016 ENDMK
⊗;
OPDEF OUTDEC [PUSHJ P, .]
IDIVI 10, =10
HRLZM 11, (P)
SKIPE 10
PUSHJ P, .-3
HLRZ 11, (P)
ADDI 11, 60
OUTCHR 11
POPJ P,
QMLD: INIT 0, 10 ; init in image mode
SIXBIT /DSK/
MLDBLK
JRST ZDISK ; error return
PUSHJ P,RESCN ;*RES* LOOK FOR NAME ON PREV LINE
PUSHJ P,FINFI2 ;*RES* LOOK IT UP
JRST .+3 ;*RES*
OUTSTR [ASCIZ ⊗MIX-LOAD FILE: ⊗]
FINFO ; get file data
HRLZI 10, 'MLD'
MOVEM 10, BLK+1
MOVE 10, [XWD BLK, MLDBLK+3] ; put data into MLDBLK
BLT 10, MLDBLK+6
LOOKUP 0, MLDBLK+3 ; lookup file
JRST .-7 ; error → try again
MBOX: PUSHJ P, MLDIN ; get word
JUMPL 10, MCHAIN ; <0 → chain
JUMPE 10, MSTART ; 0 → end of file
MOVEM 10, MLDBOX ; set up box head
MOVNI 11, 17 ; counter
PUSHJ P, MLDIN ; get word
MOVEM 10, MLDBOX+20(11) ; put into box
AOJL 11, .-2 ; back for more
HLRZ 10, MLDBOX ; set up BLT pointer
HRRZ 11, MLDBOX
JUMPE 11, MBOX ; 0 → empty box
ADD 11, 10
SOJ 11,
ADD 10, [XWD MLDBOX+1, MC0000]
BLT 10, MC0000 (11) ; move box into core
JRST MBOX ; back for more
MCHAIN: HRRZ 12, 10 ; this is the value of the symbol
TLZ 10, 400000 ; mask out "-"
MOVEI 13, =4000 ; want to limit possible number of links in chain
CHAIN1: HLRZ 11, 10 ; get address of MIX word
CAIL 11, 0 ; test for out-of-bounds
CAILE 11, =3999
JRST BADCHN
SOJL 13, BADCHN ; also test for too many links
MOVE 10, MC0000 (11) ; get next chain address
HRLM 12, MC0000 (11) ; put real symbol value into MIX word
JUMPL 10, MBOX ; "-" → end of chain
JRST CHAIN1 ; back for more of chain
MSTART: PUSHJ P, MLDIN ; get starting address
ADDI 10, MC0000 ; relocate into MIX core
MOVEM 10, MLDPC0 ; save it
movei 11, symtab ; output first section of symbol table
movei 12, linked-symtab ; this many entries
mst1: pushj p, mldin ; output it
skipe 10 ; if there is an address,
addi 10, linked-4 ; make it real
movem 10, (11) ; this is the pointer
sosle 12 ; any more words left?
aoja 11, mst1 ; yes
movei 11, linked ; output second section of symbol table
movei 12, 600 ; this many entries
mst2: pushj p, mldin ; output it
trne 10, 777777 ; is there an address in the right half?
addi 10, linked-4 ; yes → make it real
movem 10, (11) ; get first word of entry
for x←1,3
{ pushj p, mldin
movem 10, (11) x ; get rest of entry
}
addi 11, 4 ; ready for next entry
sosle 12 ; any more?
jrst mst2 ; yes → get them
MOVE PC, MLDPC0 ; set PC
RELEAS 0, 0 ; release i/o channel
JRST BUTTON
BADCHN: OUTSTR [ASCIZ ⊗
#ERROR: INVALID CHAIN FOR SYMBOL WITH VALUE: ⊗]
MOVE 10, 12
OUTDEC
SETZ 10,
JRST MSTART+1
MLDPC0: 0
QPCMLD: MOVE PC, MLDPC0 ; set PC
JRST BUTTON
MLDIN: SOSG MLDBLK+2 ; decrement character count
IN 0, ; count exhausted, next buffer
JRST .+2 ; success
JRST ZMLD ; error
ILDB 10, MLDBLK+1 ; get input word
POPJ P, ; return
MLDBOX: BLOCK 20
MLDBLK: BLOCK 7
symtab: block 400 ; this is the symbol table
linked: block 600*4
OPLIST: SIXBIT /ADD/
SIXBIT /ALF/
SIXBIT /CHAR/
SIXBIT /CMP1/
SIXBIT /CMP2/
SIXBIT /CMP3/
SIXBIT /CMP4/
SIXBIT /CMP5/
SIXBIT /CMP6/
SIXBIT /CMPA/
SIXBIT /CMPX/
SIXBIT /CON/
SIXBIT /DEC1/
SIXBIT /DEC2/
SIXBIT /DEC3/
SIXBIT /DEC4/
SIXBIT /DEC5/
SIXBIT /DEC6/
SIXBIT /DECA/
SIXBIT /DECX/
SIXBIT /DIV/
SIXBIT /END/
SIXBIT /ENN1/
SIXBIT /ENN2/
SIXBIT /ENN3/
SIXBIT /ENN4/
SIXBIT /ENN5/
SIXBIT /ENN6/
SIXBIT /ENNA/
SIXBIT /ENNX/
SIXBIT /ENT1/
SIXBIT /ENT2/
SIXBIT /ENT3/
SIXBIT /ENT4/
SIXBIT /ENT5/
SIXBIT /ENT6/
SIXBIT /ENTA/
SIXBIT /ENTX/
SIXBIT /EQU/
SIXBIT /FADD/
SIXBIT /FCMP/
SIXBIT /FDIV/
SIXBIT /FMUL/
SIXBIT /FSUB/
SIXBIT /HLT/
SIXBIT /IN/
SIXBIT /INC1/
SIXBIT /INC2/
SIXBIT /INC3/
SIXBIT /INC4/
SIXBIT /INC5/
SIXBIT /INC6/
SIXBIT /INCA/
SIXBIT /INCX/
SIXBIT /IOC/
SIXBIT /J1E/
SIXBIT /J1N/
SIXBIT /J1NN/
SIXBIT /J1NP/
SIXBIT /J1NZ/
SIXBIT /J1O/
SIXBIT /J1P/
SIXBIT /J1Z/
SIXBIT /J2E/
SIXBIT /J2N/
SIXBIT /J2NN/
SIXBIT /J2NP/
SIXBIT /J2NZ/
SIXBIT /J2O/
SIXBIT /J2P/
SIXBIT /J2Z/
SIXBIT /J3E/
SIXBIT /J3N/
SIXBIT /J3NN/
SIXBIT /J3NP/
SIXBIT /J3NZ/
SIXBIT /J3O/
SIXBIT /J3P/
SIXBIT /J3Z/
SIXBIT /J4E/
SIXBIT /J4N/
SIXBIT /J4NN/
SIXBIT /J4NP/
SIXBIT /J4NZ/
SIXBIT /J4O/
SIXBIT /J4P/
SIXBIT /J4Z/
SIXBIT /J5E/
SIXBIT /J5N/
SIXBIT /J5NN/
SIXBIT /J5NP/
SIXBIT /J5NZ/
SIXBIT /J5O/
SIXBIT /J5P/
SIXBIT /J5Z/
SIXBIT /J6E/
SIXBIT /J6N/
SIXBIT /J6NN/
SIXBIT /J6NP/
SIXBIT /J6NZ/
SIXBIT /J6O/
SIXBIT /J6P/
SIXBIT /J6Z/
SIXBIT /JAE/
SIXBIT /JAN/
SIXBIT /JANN/
SIXBIT /JANP/
SIXBIT /JANZ/
SIXBIT /JAO/
SIXBIT /JAP/
SIXBIT /JAZ/
SIXBIT /JBUS/
SIXBIT /JE/
SIXBIT /JG/
SIXBIT /JGE/
SIXBIT /JL/
SIXBIT /JLE/
SIXBIT /JMP/
SIXBIT /JNE/
SIXBIT /JNOV/
SIXBIT /JOV/
SIXBIT /JRED/
SIXBIT /JSJ/
SIXBIT /JXE/
SIXBIT /JXN/
SIXBIT /JXNN/
SIXBIT /JXNP/
SIXBIT /JXNZ/
SIXBIT /JXO/
SIXBIT /JXP/
SIXBIT /JXZ/
SIXBIT /LD1/
SIXBIT /LD1N/
SIXBIT /LD2/
SIXBIT /LD2N/
SIXBIT /LD3/
SIXBIT /LD3N/
SIXBIT /LD4/
SIXBIT /LD4N/
SIXBIT /LD5/
SIXBIT /LD5N/
SIXBIT /LD6/
SIXBIT /LD6N/
SIXBIT /LDA/
SIXBIT /LDAN/
SIXBIT /LDX/
SIXBIT /LDXN/
SIXBIT /MOVE/
SIXBIT /MUL/
SIXBIT /NOP/
SIXBIT /NUM/
SIXBIT /ORIG/
SIXBIT /OUT/
SIXBIT /SLA/
SIXBIT /SLAX/
SIXBIT /SLB/
SIXBIT /SLC/
SIXBIT /SRA/
SIXBIT /SRAX/
SIXBIT /SRB/
SIXBIT /SRC/
SIXBIT /ST1/
SIXBIT /ST2/
SIXBIT /ST3/
SIXBIT /ST4/
SIXBIT /ST5/
SIXBIT /ST6/
SIXBIT /STA/
SIXBIT /STJ/
SIXBIT /STX/
SIXBIT /STZ/
SIXBIT /SUB/
LASTOP ←← .-1
GOTOP: 0501 ; ADD
XWD 400000, ALF
0105 ; CHAR
0571 ; CMP1
0572 ; CMP2
0573 ; CMP3
0574 ; CMP4
0575 ; CMP5
0576 ; CMP6
0570 ; CMPA
0577 ; CMPX
XWD 400000, CON
0161 ; DEC1
0162 ; DEC2
0163 ; DEC3
0164 ; DEC4
0165 ; DEC5
0166 ; DEC6
0160 ; DECA
0167 ; DECX
0504 ; DIV
XWD 400000, END
0361 ; ENN1
0362 ; ENN2
0363 ; ENN3
0364 ; ENN4
0365 ; ENN5
0366 ; ENN6
0360 ; ENNA
0367 ; ENNX
0261 ; ENT1
0262 ; ENT2
0263 ; ENT3
0264 ; ENT4
0265 ; ENT5
0266 ; ENT6
0260 ; ENTA
0267 ; ENTX
XWD 400000, EQU
0601 ; FADD
0670 ; FCMP
0604 ; FDIV
0603 ; FMUL
0602 ; FSUB
0205 ; HLT
0044 ; IN
0061 ; INC1
0062 ; INC2
0063 ; INC3
0064 ; INC4
0065 ; INC5
0066 ; INC6
0060 ; INCA
0067 ; INCX
0043 ; IOC
0651 ; J1E
0051 ; J1N
0351 ; J1NN
0551 ; J1NP
0451 ; J1NZ
0751 ; J1O
0251 ; J1P
0151 ; J1Z
0652 ; J2E
0052 ; J2N
0352 ; J2NN
0552 ; J2NP
0452 ; J2NZ
0752 ; J2O
0252 ; J2P
0152 ; J2Z
0653 ; J3E
0053 ; J3N
0353 ; J3NN
0553 ; J3NP
0453 ; J3NZ
0753 ; J3O
0253 ; J3P
0153 ; J3Z
0654 ; J4E
0054 ; J4N
0354 ; J4NN
0554 ; J4NP
0454 ; J4NZ
0754 ; J4O
0254 ; J4P
0154 ; J4Z
0655 ; J5E
0055 ; J5N
0355 ; J5NN
0555 ; J5NP
0455 ; J5NZ
0755 ; J5O
0255 ; J5P
0155 ; J5Z
0656 ; J6E
0056 ; J6N
0356 ; J6NN
0556 ; J6NP
0456 ; J6NZ
0756 ; J6O
0256 ; J6P
0156 ; J6Z
0650 ; JAE
0050 ; JAN
0350 ; JANN
0550 ; JANP
0450 ; JANZ
0750 ; JAO
0250 ; JAP
0150 ; JAZ
0042 ; JBUS
0547 ; JE
0647 ; JG
0747 ; JGE
0447 ; JL
1147 ; JLE
0047 ; JMP
1047 ; JNE
0347 ; JNOV
0247 ; JOV
0046 ; JRED
0147 ; JSJ
0657 ; JXE
0057 ; JXN
0357 ; JXNN
0557 ; JXNP
0457 ; JXNZ
0757 ; JXO
0257 ; JXP
0157 ; JXZ
0511 ; LD1
0521 ; LD1N
0512 ; LD2
0522 ; LD2N
0513 ; LD3
0523 ; LD3N
0514 ; LD4
0524 ; LD4N
0515 ; LD5
0525 ; LD5N
0516 ; LD6
0526 ; LD6N
0510 ; LDA
0520 ; LDAN
0517 ; LDX
0527 ; LDXN
0107 ; MOVE
0503 ; MUL
0000 ; NOP
0005 ; NUM
XWD 400000, ORIG
0045 ; OUT
0006 ; SLA
0206 ; SLAX
0606 ; SLB
0406 ; SLC
0106 ; SRA
0306 ; SRAX
0706 ; SRB
0506 ; SRC
0531 ; ST1
0532 ; ST2
0533 ; ST3
0534 ; ST4
0535 ; ST5
0536 ; ST6
0530 ; STA
0240 ; STJ
0537 ; STX
0541 ; STZ
0502 ; SUB